// #include<iostream>
// #include<regex>
// #include<string>

// int main()
// {
//     std::string s("/numbers/1234");

//     std::smatch sm;
//     std::regex e("/numbers/(\\d+)");
//     bool ret=std::regex_match(s,sm,e);
    
//     if(ret==true)
//     {
//         for(auto& m:sm)
//         {
//             std::cout<<m<<std::endl;
//         }
//     }
//     else {
//         perror("regex_match");
//     }

//     return 0;
// }


// #include <iostream>
// #include <string>
// #include <regex>

// int main()
// {
//     std::string str = "/numbers/1234";
//     //匹配以 /numbers/起始，后边跟了一个或多个数字字符的字符串，并且在匹配的过程中提取这个匹配到的数字字符串
//     std::regex e("/numbers/(\\d+)");
//     std::smatch matches;

//     bool ret = std::regex_match(str, matches, e);
//     if (ret == false) {
//         return -1;
//     }
//     for (auto &s : matches) {
//         std::cout << s << std::endl;
//     }
//     return 0;
// }


#include <iostream>  
#include <string>  
#include <regex>  
  
int main()  
{  
    std::string str = "/numbers/1234 ?qaaa bb";  
    // 匹配以 /numbers/起始，后边跟了一个或多个数字字符的字符串，并且在匹配的过程中提取这个匹配到的数字字符串  
    //std::regex e("/numbers/(\\d)");  
    std::regex e("/numbers/(\\d+) (.*)?");  
    std::smatch matches;  
  
    bool ret = std::regex_search(str, matches, e);  
    if (ret == false) {  
        std::cerr << "No match found." << std::endl;  
        return -1;  
    }  
  
    // matches[0] 是整个匹配的字符串，matches[1] 是第一个（也是唯一一个）捕获组的内容  
    for (size_t i = 0; i < matches.size(); ++i) {  
        std::cout << "Match " << i << ": " << matches[i] << std::endl;  
    }  
  
    // 通常，我们只关心捕获组的内容  
    std::cout << "Captured number: " << matches[1] << std::endl;  
  
    return 0;  
}